#ifndef COMM_H
#define COMM_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

//断言宏，用来简化判断流程
#define SYSERR(x,option,y,message,z)	if((x) option (y))		\
										{						\
											printf("%s %s %d : %s\n",__FILE__,__func__,__LINE__,message);\
											return z;			\
										}

// 验证设备名称（字符串长度<32，非空）
#define DEV_ID_SURE(id) \
    ( (id >= 10000) && (id <= 99999) ? 1 : 0)

// 验证设备名称（字符串长度<32，非空）
#define DEV_NAME_SURE(name) \
    ( (name != NULL) && (strlen(name) > 0) && (strlen(name) < 32) ? 1 : 0)

// 验证设备类型（字符串长度<32，非空）
#define DEV_TYPE_SURE(type) \
    ( (type != NULL) && (strlen(type) > 0) && (strlen(type) < 32) ? 1 : 0)

// 验证IP地址（字符串长度<16，格式为xxx.xxx.xxx.xxx，每个段0-255）
#define DEV_IP_SURE(ip) \
    ( (ip != NULL) && (strlen(ip) > 0) && (strlen(ip) < 16) && ip_format(ip) ? 1 : 0 )
    
// 验证功率
#define DEV_POWER_SURE(power) \
    ( (power >= 0.0f) && (power <= 10000.0f) ? 1 : 0)

#define USER_ID_SURE(id) \
    ( (id <= 999) && (id >= 100) ? 1 : 0)

#define USER_NAME_SURE(name) \
    ( (name != NULL) && (strlen(name) > 0) && (strlen(name) < 16) ? 1 : 0)

#define USER_PW_SURE(pw) \
    ( (pw != NULL) && (strlen(pw) > 0) && (strlen(pw) < 16) ? 1 : 0)


// 错误次数
#define LOOPCOUNT 3
// 管理员账号
#define ADMIN_NAME "admin"
// 管理员密码
#define ADMIN_PASS "admin"
//设备数据文件
#define DEV_FILE "device.dat"
//用户账号文件
#define USER_FILE "users.dat"


extern int dev_id_min; 
extern int user_id_min;
extern int dev_count;  

void clear_input_buffer();

#endif // COMM_H
